package luahelper

import (
	lua "github.com/yuin/gopher-lua"
)

func PushErrorMessage(l *lua.LState, msg string) int {
	l.Push(lua.LBool(false))
	l.Push(lua.LString(msg))
	return 2
}

func PushStatusAndMessage(l *lua.LState, status bool, msg string) int {
	l.Push(lua.LBool(status))
	l.Push(lua.LString(msg))
	return 2
}

func PushStatus(l *lua.LState, status bool) int {
	l.Push(lua.LBool(status))
	return 1
}

func DofileInNewState(file string) (err error) {
	l := lua.NewState()
	if All_RegisterFunc != nil {
		All_RegisterFunc(l)
	}

	return l.DoFile(file)
}

func RegisterAllFunc(l *lua.LState) {
	if All_RegisterFunc != nil {
		All_RegisterFunc(l)
	}
}

func GetTableStringFeild(t *lua.LTable, name string) string {
	return lua.LVAsString(t.RawGetString(name))
}

func GetTableTableFeild(t *lua.LTable, name string) *lua.LTable {
	v := t.RawGetString(name)
	if v == nil {
		return nil
	}

	if t, ok := v.(*lua.LTable); ok {
		return t
	}

	return nil
}

//func Unmarshal(table *lua.LTable, obj interface{}) (err error) {
//	tinfo := reflect.TypeOf(obj)
//	value := reflect.ValueOf(obj)
//
//	if tinfo.Kind() == reflect.Ptr {
//		tinfo = tinfo.Elem()
//	}
//
//	if value.Kind() == reflect.Ptr {
//		value = value.Elem()
//	}
//
//	for i := 0; i < tinfo.NumField(); i++ {
//		fieldName := tinfo.Field(i).Name
//		fieldValue := value.FieldByName(fieldName)
//
//		fieldInTable := table.RawGetString(fieldName)
//
//		kind := fieldValue.Kind()
//
//		if fieldTable, ok := fieldInTable.(*lua.LTable); ok {
//			if kind == reflect.Struct {
//				Unmarshal(fieldTable, (&fieldValue).Interface())
//			} else if kind == reflect.Ptr {
//				Unmarshal(fieldTable, fieldValue.Interface())
//			}
//		} else {
//			if kind == reflect.Float64 || kind == reflect.Float32 {
//				fieldValue.SetFloat(float64(lua.LVAsNumber(fieldInTable)))
//			} else if kind == reflect.Int64 || kind == reflect.Int32 || kind == reflect.Int {
//				fieldValue.SetInt(int64(lua.LVAsNumber(fieldInTable)))
//			} else if kind == reflect.String {
//				fieldValue.SetString(lua.LVAsString(fieldInTable))
//			}
//		}
//	}
//
//	return
//}
